//汉诺塔问题
#include<bits/stdc++.h>
using namespace std;

int cnt = 0;
int M = 0;

void hano(int n,char src,char tmp,char dest)
{
	if(n == 1)
	{
		cnt++;
		
		if(M == cnt)
			cout<<"#"<<n<<": "<<src<<"->"<<dest<<endl;
		
		return ;
	}
	//把盘子都放到辅助柱子上
	hano(n-1,src,dest,tmp);
	cnt++; //这里计数器+1是表示将剩余的最大的盘子移动到目标柱上

	//判断此步骤是否等于M
	//若相等，则输出此时将相对的最后一个盘子放到目标柱的操作过程
	if(M == cnt)
		cout<<"#"<<n<<": "<<src<<"->"<<dest<<endl;
	
	//把辅助柱上的盘子都移动到目标柱上
	hano(n-1,tmp,src,dest);
}
int main()
{
	int N = 0;
	cin >> N;
	cin >> M;
	hano(N,'A','B','C');
	cout<<cnt;
	
	return 0;
}

